# -*-coding: utf-8 -*-
# Tubedl konsol arayüzü
 # Copyright (C) 2007 - 2008
 # Oğuzhan Eroğlu (oguzhan@oguzhaneroglu.com)
 # Mk18(mertk18@gmail.com)
 # This program is free software: you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
 # the Free Software Foundation, either version 3 of the License, or
 # (at your option) any later version.

 # This program is distributed in the hope that it will be useful,
 # but WITHOUT ANY WARRANTY; without even the implied warranty of
 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 # GNU General Public License for more details.

import video_api
import sys
from PyQt4 import QtCore, QtGui, QtNetwork
import re
import urllib2
import os

yardim_metni = """Kullanım: tubedl [adres] [isim] [cevirilecektür veya '--cevirme']
dosyayı çevirmek istemiyorsanız hiçbir uzantı yazmayın.
Desteklenen siteleri görmek için 'tubedl --destek' komutuna bakın."""
argumanlar = ("--yardim", "--destek", "--cevirme", "avi", "mp3")
cdestek = ("avi", "mp3")
destek = video_api.destek

class tubedl(video_api.API):
	def __init__(self):
		video_api.API.__init__(self)
		self.destek = video_api.destek

	def setbar(self, value, max):
		yuzde = 100 * value / max
		prgsyuzde = 30 * yuzde / 100
		sys.stderr.write("\rVideo indiriliyor... [%s] %s(%s)" % (str(prgsyuzde * "=" + (30 - prgsyuzde) * " "),"%", str(yuzde)))

	def read(self, site, adres):
		self.http = QtNetwork.QHttp(site)
		QtCore.QObject.connect(self.http, QtCore.SIGNAL("done(bool)"), self.bitti)
		self.http.get(adres)

	def bitti(self):
		self.url_read = self.http.readAll()
		exec("self.url_dl = self.%s(self.url_read)" % self.garguman.replace(".", "_"))
		self.url_flv = re.compile("/.*").findall(str(self.url_dl.replace("//", "--")))[0]
		self.indir(self.garguman_, self.url_flv)
	
	def bitti_flv(self):
		print "\nİndirme tamamlandı."
		if len(sys.argv) == 4:
			if sys.argv[3] == "avi":
				print "Dosya avi ye çevriliyor.."
				os.system("ffmpeg -i '%s.flv' '%s.avi'" % (sys.argv[2], sys.argv[2]))
			elif sys.argv[3] == "mp3":
				print "Dosya mp3 e çevriliyor.."
				os.system("ffmpeg -i '%s.flv' '%s.mp3'" % (sys.argv[2], sys.argv[2]))
			else:
				print "Hata: Geçersiz çeviri seçeneği."
			sys.exit()
		else:
			sys.exit()
	
	def indir(self, adres, flv_adres):
		self.video_dosya = QtCore.QFile(str("%s.flv" % (str(sys.argv[2]))))
		self.tadres = urllib2.urlopen(str(self.url_dl.replace("--", "//"))).geturl()
		self.tadres_url = re.compile("--(.*?)/.").findall(self.tadres.replace("//", "--"))[0]
		self.tadres_id = re.compile("/.*").findall(self.tadres.replace("//", "--"))[0]
		self.http = QtNetwork.QHttp(self.tadres_url)
		QtCore.QObject.connect(self.http, QtCore.SIGNAL("dataReadProgress(int,int)"), self.setbar)
		QtCore.QObject.connect(self.http, QtCore.SIGNAL("done(bool)"), self.bitti_flv)
		self.http.get(self.tadres_id, self.video_dosya)

	def cozumle(self, video_adres):
		self.garguman = re.compile(str("|".join(self.destek))).findall(video_adres)[0]
		self.garguman_ = "www." + self.garguman
		self.adres = re.compile("/.*").findall(video_adres.replace("//", "--"))[0]
		self.read(self.garguman_, self.adres)

if len(sys.argv) == 2:
	if sys.argv[1] == "--yardim":
		print yardim_metni
		sys.exit()
	elif sys.argv[1] == "--destek":
		print "Desteklenen siteler: %s" % ", ".join(destek)
		sys.exit()
	else:
		print "Hata: Geçersiz seçenek."
		sys.exit()
if (len(sys.argv) == 3) or (len(sys.argv) == 4):
	if len(sys.argv) == 4:
		if sys.argv[3] not in cdestek:
			print "Hata: Desteklenmeyen çeviri türü."
			sys.exit()
	tdl = tubedl()
	tdl.cozumle(sys.argv[1])

app = QtGui.QApplication([])
app.exec_()